<?php
/**
 * tpshop
 * ============================================================================
 * 版权所有 2015-2027 深圳搜豹网络科技有限公司，并保留所有权利。
 * 网站地址: http://www.tp-shop.cn
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
 * 不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 * Author: 当燃
 * Date: 2015-09-09
 */
namespace Home\Controller;

//use Home\Logic\OrderLogic;
use Think\AjaxPage;

class OrderController extends BaseController {
    public $order_status;
    public $pay_status;
    public $shipping_status;

    /*
     * 初始化操作
     */
    public function _initialize() {
        parent::_initialize();
        C('TOKEN_ON', false); // 关闭表单令牌验证
        $this->order_status = C('ORDER_STATUS');
        $this->pay_status = C('PAY_STATUS');
        $this->shipping_status = C('SHIPPING_STATUS');
        // 订单 支付 发货状态
        $this->assign('order_status', $this->order_status);
        $this->assign('pay_status', $this->pay_status);
        $this->assign('shipping_status', $this->shipping_status);
    }

    /*
     *订单首页
     */
    public function index() {
        $begin = date('Y/m/d', (time() - 30 * 60 * 60 * 24));//30天前
        $end = date('Y/m/d', strtotime('+1 days'));
        $this->assign('timegap', $begin . '-' . $end);
        $this->display();
    }

    /*
     *Ajax首页
     */
    public function ajaxindex() {
        $phoneNo= I('phoneNo');

        $where  ="1=1 ";

        if($phoneNo){

            $where .= " and user_phone like '%".$phoneNo."%'";
        }

        $user_list = M('user')->where($where)->select();



//        $orderLogic = new OrderLogic();
//        $timegap = I('timegap');
//        if($timegap){
//        	$gap = explode('-', $timegap);
//            $gap[0]=$gap[0]." 00:00:01";
//            $gap[1]=$gap[1]." 23:59:59";
//        	$begin = strtotime($gap[0]);
//        	$end = strtotime($gap[1]);
//
//        }
//        // 搜索条件
//        $condition = array();
//        I('consignee') ? $condition['consignee'] = trim(I('consignee')) : false;
//        if($begin && $end){
//        	$condition['add_time'] = array('between',"$begin,$end");
//        }
//        I('order_sn') ? $condition['order_sn'] = trim(I('order_sn')) : false;
//        I('order_status') != '' ? $condition['order_status'] = I('order_status') : false;
//        I('pay_status') != '' ? $condition['pay_status'] = I('pay_status') : false;
//        I('pay_code') != '' ? $condition['pay_code'] = I('pay_code') : false;
//        I('shipping_status') != '' ? $condition['shipping_status'] = I('shipping_status') : false;
//        I('user_id') ? $condition['user_id'] = trim(I('user_id')) : false;
//        $sort_order = I('order_by','DESC').' '.I('sort');
//        $count = M('order')->where($condition)->count();
//        $Page  = new AjaxPage($count,20);
//        //  搜索条件下 分页赋值
//        foreach($condition as $key=>$val) {
//            $Page->parameter[$key]   =  urlencode($val);
//        }
//        $show = $Page->show();
//        //
//        $orderList = $orderLogic->getOrderList($condition,$sort_order,$Page->firstRow,$Page->listRows);
        $this->assign('user_list',$user_list);
//        $this->assign('page',$show);// 赋值分页输出
        $this->display();
    }


    /*
     * ajax 发货订单列表
    */
    public function ajaxdelivery() {
        $orderLogic = new OrderLogic();
        $condition = array();
        I('consignee') ? $condition['consignee'] = trim(I('consignee')) : false;
        I('order_sn') != '' ? $condition['order_sn'] = trim(I('order_sn')) : false;
        $condition['order_status'] = array('egt', 1);
        $shipping_status = I('shipping_status');
        $condition['shipping_status'] = empty($shipping_status) ? array('neq', 1) : $shipping_status;

        $count = M('order')->where($condition)->count();
        $Page = new AjaxPage($count, 10);
        //搜索条件下 分页赋值
        foreach ($condition as $key => $val) {
            $Page->parameter[$key] = urlencode($val);
        }
        $show = $Page->show();
        $orderList = M('order')->where($condition)->limit($Page->firstRow . ',' . $Page->listRows)->order('add_time DESC')->select();
        $this->assign('orderList', $orderList);
        $this->assign('page', $show);// 赋值分页输出
        $this->display();
    }

    /**
     * 订单详情
     * @param int $id 订单id
     */
    public function detail($order_id) {
        $orderLogic = new OrderLogic();
        $order = $orderLogic->getOrderInfo($order_id);
        $orderGoods = $orderLogic->getOrderGoods($order_id);
        $button = $orderLogic->getOrderButton($order);
        // 获取操作记录
        $action_log = M('order_action')->where(array('order_id' => $order_id))->order('log_time desc')->select();
        $this->assign('order', $order);
        $this->assign('action_log', $action_log);
        $this->assign('orderGoods', $orderGoods);
        $split = count($orderGoods) > 1 ? 1 : 0;
        foreach ($orderGoods as $val) {
            if ($val['goods_num'] > 1) {
                $split = 1;
            }
        }
        $this->assign('split', $split);
        $this->assign('button', $button);
        $this->display();
    }

    /**
     * 订单编辑
     * @param int $id 订单id
     */
    public function edit_order() {
        $order_id = I('order_id');
        $orderLogic = new OrderLogic();
        $order = $orderLogic->getOrderInfo($order_id);
        if ($order['shipping_status'] != 0) {
            $this->error('已发货订单不允许编辑');
            exit;
        }

        $orderGoods = $orderLogic->getOrderGoods($order_id);

        if (IS_POST) {
            $order['consignee'] = I('consignee');// 收货人
            $order['province'] = I('province'); // 省份
            $order['city'] = I('city'); // 城市
            $order['district'] = I('district'); // 县
            $order['address'] = I('address'); // 收货地址
            $order['mobile'] = I('mobile'); // 手机           
            $order['invoice_title'] = I('invoice_title');// 发票
            $order['admin_note'] = I('admin_note'); // 管理员备注
            $order['admin_note'] = I('admin_note'); //                  
            $order['shipping_code'] = I('shipping');// 物流方式
            $order['shipping_name'] = M('plugin')->where(array('status' => 1, 'type' => 'shipping', 'code' => I('shipping')))->getField('name');
            $order['pay_code'] = I('payment');// 支付方式            
            $order['pay_name'] = M('plugin')->where(array('status' => 1, 'type' => 'payment', 'code' => I('payment')))->getField('name');
            $goods_id_arr = I("goods_id");
            $new_goods = $old_goods_arr = array();
            //################################订单添加商品
            if ($goods_id_arr) {
                $new_goods = $orderLogic->get_spec_goods($goods_id_arr);
                foreach ($new_goods as $key => $val) {
                    $val['order_id'] = $order_id;
                    $rec_id = M('order_goods')->add($val);//订单添加商品
                    if (!$rec_id)
                        $this->error('添加失败');
                }
            }

            //################################订单修改删除商品
            $old_goods = I('old_goods');
            foreach ($orderGoods as $val) {
                if (empty($old_goods[$val['rec_id']])) {
                    M('order_goods')->where("rec_id=" . $val['rec_id'])->delete();//删除商品
                } else {
                    //修改商品数量
                    if ($old_goods[$val['rec_id']] != $val['goods_num']) {
                        $val['goods_num'] = $old_goods[$val['rec_id']];
                        M('order_goods')->where("rec_id=" . $val['rec_id'])->save(array('goods_num' => $val['goods_num']));
                    }
                    $old_goods_arr[] = $val;
                }
            }

            $goodsArr = array_merge($old_goods_arr, $new_goods);
            $result = calculate_price($order['user_id'], $goodsArr, $order['shipping_code'], 0, $order['province'], $order['city'], $order['district'], 0, 0, 0, 0);
            if ($result['status'] < 0) {
                $this->error($result['msg']);
            }

            //################################修改订单费用
            $order['goods_price'] = $result['result']['goods_price']; // 商品总价
            $order['shipping_price'] = $result['result']['shipping_price'];//物流费
            $order['order_amount'] = $result['result']['order_amount']; // 应付金额
            $order['total_amount'] = $result['result']['total_amount']; // 订单总价
            $o = M('order')->where('order_id=' . $order_id)->save($order);

            $l = $orderLogic->orderActionLog($order_id, 'edit', '修改订单');//操作日志
            if ($o && $l) {
                $this->success('修改成功', U('Admin/Order/editprice', array('order_id' => $order_id)));
            } else {
                $this->success('修改失败', U('Admin/Order/detail', array('order_id' => $order_id)));
            }
            exit;
        }
        // 获取省份
        $province = M('region')->where(array('parent_id' => 0, 'level' => 1))->select();
        //获取订单城市
        $city = M('region')->where(array('parent_id' => $order['province'], 'level' => 2))->select();
        //获取订单地区
        $area = M('region')->where(array('parent_id' => $order['city'], 'level' => 3))->select();
        //获取支付方式
        $payment_list = M('plugin')->where(array('status' => 1, 'type' => 'payment'))->select();
        //获取配送方式
        $shipping_list = M('plugin')->where(array('status' => 1, 'type' => 'shipping'))->select();

        $this->assign('order', $order);
        $this->assign('province', $province);
        $this->assign('city', $city);
        $this->assign('area', $area);
        $this->assign('orderGoods', $orderGoods);
        $this->assign('shipping_list', $shipping_list);
        $this->assign('payment_list', $payment_list);
        $this->display();
    }

    /*
     * 拆分订单
     */
    public function split_order() {
        $order_id = I('order_id');
        $orderLogic = new OrderLogic();
        $order = $orderLogic->getOrderInfo($order_id);
        if ($order['shipping_status'] != 0) {
            $this->error('已发货订单不允许编辑');
            exit;
        }
        $orderGoods = $orderLogic->getOrderGoods($order_id);
        if (IS_POST) {
            $data = I('post.');
            //################################先处理原单剩余商品和原订单信息
            $old_goods = I('old_goods');
            foreach ($orderGoods as $val) {
                if (empty($old_goods[$val['rec_id']])) {
                    M('order_goods')->where("rec_id=" . $val['rec_id'])->delete();//删除商品
                } else {
                    //修改商品数量
                    if ($old_goods[$val['rec_id']] != $val['goods_num']) {
                        $val['goods_num'] = $old_goods[$val['rec_id']];
                        M('order_goods')->where("rec_id=" . $val['rec_id'])->save(array('goods_num' => $val['goods_num']));
                    }
                    $oldArr[] = $val;//剩余商品
                }
                $all_goods[$val['rec_id']] = $val;//所有商品信息
            }
            $result = calculate_price($order['user_id'], $oldArr, $order['shipping_code'], 0, $order['province'], $order['city'], $order['district'], 0, 0, 0, 0);
            if ($result['status'] < 0) {
                $this->error($result['msg']);
            }
            //修改订单费用
            $res['goods_price'] = $result['result']['goods_price']; // 商品总价
            $res['order_amount'] = $result['result']['order_amount']; // 应付金额
            $res['total_amount'] = $result['result']['total_amount']; // 订单总价
            M('order')->where("order_id=" . $order_id)->save($res);
            //################################原单处理结束

            //################################新单处理
            for ($i = 1; $i < 20; $i++) {
                if (!empty($_POST[$i . '_old_goods'])) {
                    $split_goods[] = $_POST[$i . '_old_goods'];
                }
            }

            foreach ($split_goods as $key => $vrr) {
                foreach ($vrr as $k => $v) {
                    $all_goods[$k]['goods_num'] = $v;
                    $brr[$key][] = $all_goods[$k];
                }
            }

            foreach ($brr as $goods) {
                $result = calculate_price($order['user_id'], $goods, $order['shipping_code'], 0, $order['province'], $order['city'], $order['district'], 0, 0, 0, 0);
                if ($result['status'] < 0) {
                    $this->error($result['msg']);
                }
                $new_order = $order;
                $new_order['order_sn'] = date('YmdHis') . mt_rand(1000, 9999);
                $new_order['parent_sn'] = $order['order_sn'];
                //修改订单费用
                $new_order['goods_price'] = $result['result']['goods_price']; // 商品总价
                $new_order['order_amount'] = $result['result']['order_amount']; // 应付金额
                $new_order['total_amount'] = $result['result']['total_amount']; // 订单总价
                $new_order['add_time'] = time();
                unset($new_order['order_id']);
                $new_order_id = M('order')->add($new_order);//插入订单表
                foreach ($goods as $vv) {
                    $vv['order_id'] = $new_order_id;
                    unset($vv['rec_id']);
                    $nid = M('order_goods')->add($vv);//插入订单商品表
                }
            }
            //################################新单处理结束
            $this->success('操作成功', U('Admin/Order/detail', array('order_id' => $order_id)));
            exit;
        }

        foreach ($orderGoods as $val) {
            $brr[$val['rec_id']] = array('goods_num' => $val['goods_num'], 'goods_name' => getSubstr($val['goods_name'], 0, 35) . $val['spec_key_name']);
        }
        $this->assign('order', $order);
        $this->assign('goods_num_arr', json_encode($brr));
        $this->assign('orderGoods', $orderGoods);
        $this->display();
    }

    /*
     * 价钱修改
     */
    public function editprice($order_id) {
        $orderLogic = new OrderLogic();
        $order = $orderLogic->getOrderInfo($order_id);
        $this->editable($order);
        if (IS_POST) {
            $admin_id = session('admin_id');
            if (empty($admin_id)) {
                $this->error('非法操作');
                exit;
            }
            $update['discount'] = I('post.discount');
            $update['shipping_price'] = I('post.shipping_price');
            $update['order_amount'] = $order['goods_price'] + $update['shipping_price'] - $update['discount'] - $order['user_money'] - $order['integral_money'] - $order['coupon_price'];
            $row = M('order')->where(array('order_id' => $order_id))->save($update);
            if (!$row) {
                $this->success('没有更新数据', U('Admin/Order/editprice', array('order_id' => $order_id)));
            } else {
                $this->success('操作成功', U('Admin/Order/detail', array('order_id' => $order_id)));
            }
            exit;
        }
        $this->assign('order', $order);
        $this->display();
    }

    /**
     * 订单删除
     * @param int $id 订单id
     */
    public function delete_order($order_id) {
        $orderLogic = new OrderLogic();
        $del = $orderLogic->delOrder($order_id);
        if ($del) {
            $this->success('删除订单成功');
        } else {
            $this->error('订单删除失败');
        }
    }

    /**
     * 订单取消付款
     */
    public function pay_cancel($order_id) {
        if (I('remark')) {
            $data = I('post.');
            $note = array('退款到用户余额', '已通过其他方式退款', '不处理，误操作项');
            if ($data['refundType'] == 0 && $data['amount'] > 0) {
                accountLog($data['user_id'], $data['amount'], 0, '退款到用户余额');
            }
            $orderLogic = new OrderLogic();
            $orderLogic->orderProcessHandle($data['order_id'], 'pay_cancel');
            $d = $orderLogic->orderActionLog($data['order_id'], 'pay_cancel', $data['remark'] . ':' . $note[$data['refundType']]);
            if ($d) {
                exit("<script>window.parent.pay_callback(1);</script>");
            } else {
                exit("<script>window.parent.pay_callback(0);</script>");
            }
        } else {
            $order = M('order')->where("order_id=$order_id")->find();
            $this->assign('order', $order);
            $this->display();
        }
    }

    /**
     * 订单打印
     * @param int $id 订单id
     */
    public function order_print() {
        $order_id = I('order_id');
        $orderLogic = new OrderLogic();
        $order = $orderLogic->getOrderInfo($order_id);
        $order['province'] = getRegionName($order['province']);
        $order['city'] = getRegionName($order['city']);
        $order['district'] = getRegionName($order['district']);
        $order['full_address'] = $order['province'] . ' ' . $order['city'] . ' ' . $order['district'] . ' ' . $order['address'];
        $orderGoods = $orderLogic->getOrderGoods($order_id);
        $shop = tpCache('shop_info');
        $this->assign('order', $order);
        $this->assign('shop', $shop);
        $this->assign('orderGoods', $orderGoods);
        $template = I('template', 'print');
        $this->display($template);
    }

    /**
     * 快递单打印
     */
    public function shipping_print() {
        $code = I('get.code');
        $id = I('get.order_id');
        //查询是否存在订单及物流
        $shipping = M('plugin')->where(array('code' => $code, 'type' => 'shipping'))->find();
        if (!$shipping)
            $this->error('物流插件不存在', U('Admin/Index/index'));
        $orderLogic = new OrderLogic();
        $order = $orderLogic->getOrderInfo($id);
        if (!$order)
            $this->error('订单不存在');
        //检查模板是否存在
        if (!file_exists(APP_PATH . "Admin/View/Plugin/shipping/{$code}_print.html"))
            $this->error('请先在插件中心设置打印模板', U('Admin/Index/index'));
        //获取商店信息
        $shop = tpCache('shop_info');
        $order['province'] = getRegionName($order['province']);
        $order['city'] = getRegionName($order['city']);
        $order['district'] = getRegionName($order['district']);
        $order['full_address'] = $order['province'] . ' ' . $order['city'] . ' ' . $order['district'] . ' ' . $order['address'];
        $this->assign('shop', $shop);
        $this->assign('order', $order);
        $this->display("Plugin/shipping/{$code}_print");
    }

    /**
     * 生成发货单
     */
    public function deliveryHandle() {
        $orderLogic = new OrderLogic();
        $data = I('post.');
        $res = $orderLogic->deliveryHandle($data);
        if ($res) {
            $this->success('操作成功', U('Admin/Order/delivery_info', array('order_id' => $data['order_id'])));
        } else {
            $this->success('操作失败', U('Admin/Order/delivery_info', array('order_id' => $data['order_id'])));
        }
    }


    public function delivery_info() {
        $order_id = I('order_id');
        $orderLogic = new OrderLogic();
        $order = $orderLogic->getOrderInfo($order_id);
        $orderGoods = $orderLogic->getOrderGoods($order_id);
        $delivery_record = M('delivery_doc')->where('order_id=' . $order_id)->select();
        if ($delivery_record) {
            $order['invoice_no'] = $delivery_record[count($delivery_record) - 1]['invoice_no'];
        }
        $this->assign('order', $order);
        $this->assign('orderGoods', $orderGoods);
        $this->assign('delivery_record', $delivery_record);//发货记录
        $this->display();
    }

    /**
     * 发货单列表
     */
    public function delivery_list() {
        $this->display();
    }

    /*
     * ajax 退货订单列表
     */
    public function ajax_return_list() {
        // 搜索条件        
        $order_sn = trim(I('order_sn'));
        $order_by = I('order_by') ? I('order_by') : 'id';
        $sort_order = I('sort_order') ? I('sort_order') : 'desc';
        $status = I('status');
        $where = " 1 = 1 ";
        $order_sn && $where .= " and order_sn like '%$order_sn%' ";
        empty($order_sn) && $where .= " and status = '$status' ";
        $count = M('return_goods')->where($where)->count();
        $Page = new AjaxPage($count, 13);
        $show = $Page->show();
        $list = M('return_goods')->where($where)->order("$order_by $sort_order")->limit("{$Page->firstRow},{$Page->listRows}")->select();
        $goods_id_arr = get_arr_column($list, 'goods_id');
        if (!empty($goods_id_arr))
            $goods_list = M('goods')->where("goods_id in (" . implode(',', $goods_id_arr) . ")")->getField('goods_id,goods_name');
        $this->assign('goods_list', $goods_list);
        $this->assign('list', $list);
        $this->assign('page', $show);// 赋值分页输出
        $this->display();
    }

    /**
     * 删除某个退换货申请
     */
    public function return_del() {
        $id = I('get.id');
        M('return_goods')->where("id = $id")->delete();
        $this->success('成功删除!');
    }

    /**
     * 退换货操作
     */
    public function return_info() {
        $id = I('id');
        $return_goods = M('return_goods')->where("id= $id")->find();
        if ($return_goods['imgs'])
            $return_goods['imgs'] = explode(',', $return_goods['imgs']);
        $user = M('users')->where("user_id = {$return_goods[user_id]}")->find();
//        $goods = M('goods')->where("goods_id = {$return_goods[goods_id]}")->find();
        $goods = M('order_goods')->where("order_id = {$return_goods[order_id]}")->find();
        $order = M('order')->where("order_id = {$return_goods[order_id]}")->find();
        $order = M('order')->where("order_id = {$order[order_id]}")->find();
        $goods['goods_price'] = $order['user_money'];
        $type_msg = array('退换', '换货');
        $status_msg = array('未处理', '处理中', '已完成');
        if (IS_POST) {
            $data['type'] = I('type');
            $data['status'] = I('status');//操作状态
            $data['remark'] = I('remark');
            $note = "退换货:{$type_msg[$data['type']]}, 状态:{$status_msg[$data['status']]},处理备注：{$data['remark']}";
            if ($data['status'] == 3) {
                $return_goods = M('return_goods')->where("id= $id")->find();
                $updata['order_status'] = 1;
                M('order')->where("order_id=" . $return_goods['order_id'])->save($updata);//改变订单状态
                M('return_goods')->where("id= $id")->delete();
                $this->success('修改成功', U('Admin/Order/return_list'));
                exit;
            } else {
                $result = M('return_goods')->where("id= $id")->save($data);
            }
            if ($result) {
                $type = empty($data['type']) ? 2 : 3;
                $where = " order_id = " . $return_goods['order_id'] . " and goods_id=" . $return_goods['goods_id'];
                M('order_goods')->where($where)->save(array('is_send' => $type));//更改商品状态
                $orderLogic = new OrderLogic();
                $log = $orderLogic->orderActionLog($return_goods[order_id], 'refund', $note, $data['status']);
                $this->success('修改成功', U('Admin/Order/return_list'));
                exit;
            }
        }

        $this->assign('id', $id); // 用户
        $this->assign('user', $user); // 用户
        $this->assign('goods', $goods);// 商品
        $this->assign('return_goods', $return_goods);// 退换货
        $this->display();
    }

    /**
     * 管理员生成申请退货单
     */
    public function add_return_goods() {
        $order_id = I('order_id');
        $goods_id = I('goods_id');

        $return_goods = M('return_goods')->where("order_id = $order_id and goods_id = $goods_id")->find();
        if (!empty($return_goods)) {
            $this->error('已经提交过退货申请!', U('Admin/Order/return_list'));
            exit;
        }
        $order = M('order')->where("order_id = $order_id")->find();

        $data['order_id'] = $order_id;
        $data['order_sn'] = $order['order_sn'];
        $data['goods_id'] = $goods_id;
        $data['addtime'] = time();
        $data['user_id'] = $order[user_id];
        $data['remark'] = '管理员申请退换货'; // 问题描述
        M('return_goods')->add($data);
        $this->success('申请成功,现在去处理退货', U('Admin/Order/return_list'));
        exit;
    }

    /**
     * 订单操作
     * @param $id
     */
    public function order_action() {
        $orderLogic = new OrderLogic();
        $action = I('get.type');
        $order_id = I('get.order_id');
        if ($action && $order_id) {
            $res = $orderLogic->orderActionLog($order_id, $action, I('note'));
            $a = $orderLogic->orderProcessHandle($order_id, $action);
            if ($res && $a) {
                if ($action == "remove") {
                    exit(json_encode(array('status' => 1, 'msg' => '操作成功', 'url' => U('Admin/Order/return_list'))));
                }
                if ($action == "invalid") {
                    exit(json_encode(array('status' => 1, 'msg' => '操作成功', 'url' => U('Admin/Order/return_list'))));
                }
                exit(json_encode(array('status' => 1, 'msg' => '操作成功')));
            } else {
                exit(json_encode(array('status' => 0, 'msg' => '操作失败')));
            }
        } else {
            $this->error('参数错误', U('Admin/Order/detail', array('order_id' => $order_id)));
        }
    }

    public function order_log() {
        $timegap = I('timegap');
        if ($timegap) {
            $gap = explode('-', $timegap);
            $begin = strtotime($gap[0]);
            $end = strtotime($gap[1]);
        }
        $condition = array();
        $log = M('order_action');
        if ($begin && $end) {
            $condition['log_time'] = array('between', "$begin,$end");
        }
        $admin_id = I('admin_id');
        if ($admin_id > 0) {
            $condition['action_user'] = $admin_id;
        }
        $count = $log->where($condition)->count();
        $Page = new \Think\Page($count, 20);
        foreach ($condition as $key => $val) {
            $Page->parameter[$key] = urlencode($val);
        }
        $show = $Page->show();
        $list = $log->where($condition)->order('action_id desc')->limit($Page->firstRow . ',' . $Page->listRows)->select();
        $this->assign('list', $list);
        $this->assign('page', $show);
        $admin = M('admin')->getField('admin_id,user_name');
        $this->assign('admin', $admin);
        $this->display();
    }

    /**
     * 检测订单是否可以编辑
     * @param $order
     */
    private function editable($order) {
        if ($order['shipping_status'] != 0) {
            $this->error('已发货订单不允许编辑');
            exit;
        }
        return;
    }

    public function export_order() {
        //搜索条件
        $where = 'where 1=1 ';
        $consignee = I('consignee');
        if ($consignee) {
            $where .= " AND consignee like '%$consignee%' ";
        }
        $order_sn = I('order_sn');
        if ($order_sn) {
            $where .= " AND order_sn = '$order_sn' ";
        }
        if (I('order_status')) {
            $where .= " AND order_status = " . I('order_status');
        }

        $timegap = I('timegap');
        if ($timegap) {
            $gap = explode('-', $timegap);
            $begin = strtotime($gap[0]);
            $end = strtotime($gap[1]);
            $where .= " AND add_time>$begin and add_time<$end ";
        }

        $sql = "select *,FROM_UNIXTIME(add_time,'%Y-%m-%d') as create_time from __PREFIX__order $where order by order_id";
        $orderList = D()->query($sql);
        $strTable = '<table width="500" border="1">';
        $strTable .= '<tr>';
        $strTable .= '<td style="text-align:center;font-size:12px;width:120px;">订单编号</td>';
        $strTable .= '<td style="text-align:center;font-size:12px;" width="100">日期</td>';
        $strTable .= '<td style="text-align:center;font-size:12px;" width="*">收货人</td>';
        $strTable .= '<td style="text-align:center;font-size:12px;" width="*">收货地址</td>';
        $strTable .= '<td style="text-align:center;font-size:12px;" width="*">电话</td>';
        $strTable .= '<td style="text-align:center;font-size:12px;" width="*">订单金额</td>';
        $strTable .= '<td style="text-align:center;font-size:12px;" width="*">实际支付</td>';
        $strTable .= '<td style="text-align:center;font-size:12px;" width="*">支付方式</td>';
        $strTable .= '<td style="text-align:center;font-size:12px;" width="*">支付状态</td>';
        $strTable .= '<td style="text-align:center;font-size:12px;" width="*">发货状态</td>';
        $strTable .= '<td style="text-align:center;font-size:12px;" width="*">商品信息</td>';
        $strTable .= '</tr>';
        if (is_array($orderList)) {
            $region = M('region')->getField('id,name');
            foreach ($orderList as $k => $val) {
                $strTable .= '<tr>';
                $strTable .= '<td style="text-align:center;font-size:12px;">&nbsp;' . $val['order_sn'] . '</td>';
                $strTable .= '<td style="text-align:left;font-size:12px;">' . $val['create_time'] . ' </td>';
                $strTable .= '<td style="text-align:left;font-size:12px;">' . $val['consignee'] . '</td>';
                $strTable .= '<td style="text-align:left;font-size:12px;">' . "{$region[$val['province']]},{$region[$val['city']]},{$region[$val['district']]},{$region[$val['twon']]}{$val['address']}" . ' </td>';
                $strTable .= '<td style="text-align:left;font-size:12px;">' . $val['mobile'] . '</td>';
                $strTable .= '<td style="text-align:left;font-size:12px;">' . $val['goods_price'] . '</td>';
                $strTable .= '<td style="text-align:left;font-size:12px;">' . $val['order_amount'] . '</td>';
                $strTable .= '<td style="text-align:left;font-size:12px;">' . $val['pay_name'] . '</td>';
                $strTable .= '<td style="text-align:left;font-size:12px;">' . $this->pay_status[$val['pay_status']] . '</td>';
                $strTable .= '<td style="text-align:left;font-size:12px;">' . $this->shipping_status[$val['shipping_status']] . '</td>';
                $orderGoods = D('order_goods')->where('order_id=' . $val['order_id'])->select();
                $strGoods = "";
                foreach ($orderGoods as $goods) {
                    $strGoods .= "商品编号：" . $goods['goods_sn'] . " 商品名称：" . $goods['goods_name'];
                    if ($goods['spec_key_name'] != '') $strGoods .= " 规格：" . $goods['spec_key_name'];
                    $strGoods .= "<br />";
                }
                unset($orderGoods);
                $strTable .= '<td style="text-align:left;font-size:12px;">' . $strGoods . ' </td>';
                $strTable .= '</tr>';
            }
        }
        $strTable .= '</table>';
        unset($orderList);
        downloadExcel($strTable, 'order');
        exit();
    }

    /**
     * 退货单列表
     */
    public function return_list() {
        $this->display();
    }

    /**
     * 添加一笔订单
     */
    public function add_order() {
        $order = array();
        //  获取省份
        $province = M('region')->where(array('parent_id' => 0, 'level' => 1))->select();
        //  获取订单城市
        $city = M('region')->where(array('parent_id' => $order['province'], 'level' => 2))->select();
        //  获取订单地区
        $area = M('region')->where(array('parent_id' => $order['city'], 'level' => 3))->select();
        //  获取配送方式
        $shipping_list = M('plugin')->where(array('status' => 1, 'type' => 'shipping'))->select();
        //  获取支付方式
        $payment_list = M('plugin')->where(array('status' => 1, 'type' => 'payment'))->select();
        if (IS_POST) {
            $order['user_id'] = I('user_id');// 用户id 可以为空
            $order['consignee'] = I('consignee');// 收货人
            $order['province'] = I('province'); // 省份
            $order['city'] = I('city'); // 城市
            $order['district'] = I('district'); // 县
            $order['address'] = I('address'); // 收货地址
            $order['mobile'] = I('mobile'); // 手机           
            $order['invoice_title'] = I('invoice_title');// 发票
            $order['admin_note'] = I('admin_note'); // 管理员备注            
            $order['order_sn'] = date('YmdHis') . mt_rand(1000, 9999); // 订单编号;
            $order['admin_note'] = I('admin_note'); // 
            $order['add_time'] = time(); //                    
            $order['shipping_code'] = I('shipping');// 物流方式
            $order['shipping_name'] = M('plugin')->where(array('status' => 1, 'type' => 'shipping', 'code' => I('shipping')))->getField('name');
            $order['pay_code'] = I('payment');// 支付方式            
            $order['pay_name'] = M('plugin')->where(array('status' => 1, 'type' => 'payment', 'code' => I('payment')))->getField('name');

            $goods_id_arr = I("goods_id");
            $orderLogic = new OrderLogic();
            $order_goods = $orderLogic->get_spec_goods($goods_id_arr);
            $result = calculate_price($order['user_id'], $order_goods, $order['shipping_code'], 0, $order[province], $order[city], $order[district], 0, 0, 0, 0);
            if ($result['status'] < 0) {
                $this->error($result['msg']);
            }

            $order['goods_price'] = $result['result']['goods_price']; // 商品总价
            $order['shipping_price'] = $result['result']['shipping_price']; //物流费
            $order['order_amount'] = $result['result']['order_amount']; // 应付金额
            $order['total_amount'] = $result['result']['total_amount']; // 订单总价

            // 添加订单
            $order_id = M('order')->add($order);
            if ($order_id) {
                foreach ($order_goods as $key => $val) {
                    $val['order_id'] = $order_id;
                    $rec_id = M('order_goods')->add($val);
                    if (!$rec_id)
                        $this->error('添加失败');
                }
                $this->success('添加商品成功', U("Admin/Order/detail", array('order_id' => $order_id)));
                exit();
            } else {
                $this->error('添加失败');
            }
        }
        $this->assign('shipping_list', $shipping_list);
        $this->assign('payment_list', $payment_list);
        $this->assign('province', $province);
        $this->assign('city', $city);
        $this->assign('area', $area);
        $this->display();
    }

    /**
     * 选择搜索商品
     */
    public function search_goods() {
        $brandList = M("brand")->select();
        $categoryList = M("goods_category")->select();
        $this->assign('categoryList', $categoryList);
        $this->assign('brandList', $brandList);
        $where = ' is_on_sale = 1 ';//搜索条件
        I('intro') && $where = "$where and " . I('intro') . " = 1";
        if (I('cat_id')) {
            $this->assign('cat_id', I('cat_id'));
            $grandson_ids = getCatGrandson(I('cat_id'));
            $where = " $where  and cat_id in(" . implode(',', $grandson_ids) . ") "; // 初始化搜索条件

        }
        if (I('brand_id')) {
            $this->assign('brand_id', I('brand_id'));
            $where = "$where and brand_id = " . I('brand_id');
        }
        if (!empty($_REQUEST['keywords'])) {
            $this->assign('keywords', I('keywords'));
            $where = "$where and (goods_name like '%" . I('keywords') . "%' or keywords like '%" . I('keywords') . "%')";
        }
        $goodsList = M('goods')->where($where)->order('goods_id DESC')->limit(10)->select();

        foreach ($goodsList as $key => $val) {
            $spec_goods = M('spec_goods_price')->where("goods_id = {$val['goods_id']}")->select();
            $goodsList[$key]['spec_goods'] = $spec_goods;
        }
        $this->assign('goodsList', $goodsList);
        $this->display();
    }

    public function ajaxOrderNotice() {
        $order_amount = M('order')->where("order_status=0 and (pay_status=1 or pay_code='cod')")->count();
        echo $order_amount;
    }
}
